package cn.edu.neu.lab603.des

/** 仿真任务的基本单位。
  * 该类作为仿真环境中的基本任务类被仿真环境所执行，需要注意的是在 `#execute()` 方法中执行的应该是能在一个仿真周期内可以完成的任务，否则
  * 应该被分发到更多的事件中执行。
  *
  * @tparam T 仿真环境子类
  * @author Zhi &lt; yfwz100@163.com &gt;
  */
trait SimEvent[T <: Simulation[T]] {

  /** 执行这个任务。
    * 所有任务应该在一个时间戳的周期内搞定，否则应该分发多个任务执行。
    *
    * @param context 执行环境
    */
  def execute(context: T)

  /** 同一时间最多执行次数。
    *
    * @return 如果无限制，则返回 -1 否则返回 大于 0 的常数。
    */
  def getMaxExecTimes: Int = -1

  /** 事件的优先顺序。
    *
    * @return 优先顺序数
    */
  def priority = 0

  /** 是否起效。
    *
    * @return 布尔值
    */
  def effective = true
}
